package principal;

import java.awt.Point;


public class Linea {
	
	private Forma forma_origen;
	private Forma forma_destino;
	private int tipo;
	private Recta recta_origen;
	private Point origen;
	private Point destino;
	
	public Linea(Forma o, Forma d, int t){
		forma_origen = o;
		forma_destino = d;
		tipo = t;
		//posicion del dstino sobre el origen
		int arriba = (int) (o.getPos().getY()-d.getPos().getY());
		int abajo = (int) (d.getPos().getY()-o.getPos().getY());
		int izquierda = (int) (o.getPos().getX()-d.getPos().getX());
		int derecha = (int) (d.getPos().getX()-o.getPos().getX());
		
		int max = maximo(arriba, abajo, izquierda,derecha);
		if(max == 1){//La linea sale hacia aariba
			if(forma_origen.getTipo()==1)
				origen = new Point((int)forma_origen.getPos().getX()+82,(int)forma_origen.getPos().getY());
			else
				if(forma_origen.getTipo()==2)
					origen = new Point((int)forma_origen.getPos().getX()+17,(int)forma_origen.getPos().getY());
				else
					origen = new Point((int)forma_origen.getPos().getX()+21,(int)forma_origen.getPos().getY());
			
			if(forma_destino.getTipo()==1)
				destino = new Point((int)forma_destino.getPos().getX()+82,(int)forma_destino.getPos().getY()+67);
			else
				if(forma_destino.getTipo()==2)
					destino = new Point((int)forma_destino.getPos().getX()+17,(int)forma_destino.getPos().getY()+53);
				else
					destino = new Point((int)forma_destino.getPos().getX()+21,(int)forma_destino.getPos().getY()+42);

		}
		if(max == 2){//La linea sale hacia abajo
			if(forma_origen.getTipo()==1)
				origen = new Point((int)forma_origen.getPos().getX()+82,(int)forma_origen.getPos().getY()+67);
			else
				if(forma_origen.getTipo()==2)
					origen = new Point((int)forma_origen.getPos().getX()+17,(int)forma_origen.getPos().getY()+53);
				else
					origen = new Point((int)forma_origen.getPos().getX()+21,(int)forma_origen.getPos().getY()+42);
			
			if(forma_destino.getTipo()==1)
				destino = new Point((int)forma_destino.getPos().getX()+82,(int)forma_destino.getPos().getY());
			else
				if(forma_destino.getTipo()==2)
					destino = new Point((int)forma_destino.getPos().getX()+17,(int)forma_destino.getPos().getY());
				else
					destino = new Point((int)forma_destino.getPos().getX()+21,(int)forma_destino.getPos().getY());

		}
		if(max == 3){//La linea sale hacia la izquierda
			if(forma_origen.getTipo()==1)
				origen = new Point((int)forma_origen.getPos().getX(),(int)forma_origen.getPos().getY()+33);
			else
				if(forma_origen.getTipo()==2)
					origen = new Point((int)forma_origen.getPos().getX(),(int)forma_origen.getPos().getY()+26);
				else
					origen = new Point((int)forma_origen.getPos().getX(),(int)forma_origen.getPos().getY()+21);
			
			if(forma_destino.getTipo()==1)
				destino = new Point((int)forma_destino.getPos().getX()+163,(int)forma_destino.getPos().getY()+33);
			else
				if(forma_destino.getTipo()==2)
					destino = new Point((int)forma_destino.getPos().getX()+35,(int)forma_destino.getPos().getY()+26);
				else
					destino = new Point((int)forma_destino.getPos().getX()+42,(int)forma_destino.getPos().getY()+21);

		}
		if(max == 4){//La linea sale hacia la derecha
			if(forma_origen.getTipo()==1)
				origen = new Point((int)forma_origen.getPos().getX()+163,(int)forma_origen.getPos().getY()+33);
			else
				if(forma_origen.getTipo()==2)
					origen = new Point((int)forma_origen.getPos().getX()+35,(int)forma_origen.getPos().getY()+26);
				else
					origen = new Point((int)forma_origen.getPos().getX()+42,(int)forma_origen.getPos().getY()+21);
			
			if(forma_destino.getTipo()==1)
				destino = new Point((int)forma_destino.getPos().getX(),(int)forma_destino.getPos().getY()+33);
			else
				if(forma_destino.getTipo()==2)
					destino = new Point((int)forma_destino.getPos().getX(),(int)forma_destino.getPos().getY()+26);
				else
					destino = new Point((int)forma_destino.getPos().getX(),(int)forma_destino.getPos().getY()+21);

		}
		
		
	}
	
	public Point getOrigen() {
		return origen;
	}

	public void setOrigen(Point origen) {
		this.origen = origen;
	}

	public Point getDestino() {
		return destino;
	}

	public void setDestino(Point destino) {
		this.destino = destino;
	}

	private int maximo(int arriba, int abajo, int izquierda, int derecha) {
		// TODO Auto-generated method stub
		int ret = 1;
		int max = arriba;
		if(abajo>max){
			ret = 2;
			max = abajo;
		}
		if(izquierda>max){
			ret = 3;
			max = izquierda;
		}
		if(derecha>max){
			ret = 4;
			max = derecha;
		}
		return ret;
	}

	public Linea(Forma o, Recta l){
		recta_origen = l;
		forma_destino = o;
		int punto_x = l.obtener_coord_x(o.getPos().getY()+26);
		if(punto_x<o.getPos().getX()){//la linea esta mas a la izq que la forma
			origen = new Point((int)o.getPos().getX(),(int)o.getPos().getY()+27);
			destino = new Point(punto_x,(int)o.getPos().getY()+27);
		}else{
			origen = new Point((int)o.getPos().getX()+35,(int)o.getPos().getY()+27);
			destino = new Point(punto_x,(int)o.getPos().getY()+27);
		}
		
		tipo = 3;
	}

	public Recta getLin_origen() {
		return recta_origen;
	}

	public void setLin_origen(Recta recta_origen) {
		this.recta_origen = recta_origen;
	}

	public Forma getForma_origen() {
		return forma_origen;
	}

	public void setForma_origen(Forma forma_origen) {
		this.forma_origen = forma_origen;
	}

	public Forma getForma_destino() {
		return forma_destino;
	}

	public void setForma_destino(Forma forma_destino) {
		this.forma_destino = forma_destino;
	}

	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}
	public Point getPuntoRectaOrigen(){
		double x = (-recta_origen.b*forma_destino.getPos().getY()-recta_origen.c)/recta_origen.a;
		return new Point((int)x,(int)forma_destino.getPos().getY());
	}

}
